home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C++ / Frameworks / Sprocket Framework DR2 / Sprocket Framework / MultiPanelDialogWindow.cp < prev    next >
Text File  |  1996-06-15  |  4KB  |  185 lines

  1. /*
  2.  
  3.     File:        MultiPaneDialogWindow.cp
  4.     Project:    Sprocket Framework 1.1 (DR2), released 6/15/96
  5.     Contains:    A simple dialog window recipe
  6.     To Do:        Whatever your heart desires
  7.  
  8.     Sprocket Major Contributors:
  9.     ----------------------------
  10.     Dave Falkenburg, producer of Sprocket 1.0
  11.     Bill Hayden,     producer of Sprocket 1.1
  12.     Steve Sisak,     producer of the upcoming Sprocket 2.0
  13.     
  14.     Pete Alexander        Steve Falkenburg    Randy Thelen
  15.     Eric Berdahl        Nitin Ganatra        Chris K. Thomas
  16.     Marshall Clow        Dave Hershey        Leonard Rosenthal
  17.     Tim Craycroft        Dave Mark            Dean Yu
  18.     David denBoer        Gary Powell
  19.     Cameron Esfahani    Jon Summers            Apple Computer, Inc.
  20.         
  21.     Comments, Additions, or Corrections:
  22.     ------------------------------------
  23.     Bill Hayden, Nikol Software <nikol@codewell.com>
  24.  
  25. */
  26.  
  27.  
  28. #include "MultiPanelDialogWindow.h"
  29. #include "UDialog.h"
  30. #include "UGuide.h"
  31.  
  32. #include "Sprocket.h"
  33.  
  34.  
  35.  
  36. TMultiPanelDialogWindow::TMultiPanelDialogWindow(DialogTemplateID dialogTemplateID) : TDialogWindow(dialogTemplateID)
  37. {
  38.     fGuideSearchString[0] = 0;
  39. }
  40.  
  41.  
  42.  
  43. OSErr TMultiPanelDialogWindow::IMultiPanelDialogWindow(short defaultPanel, short guideItem, short panelSelectorItem)
  44. {
  45.     fGuideItem = guideItem;
  46.     fPanelSelectorItem = panelSelectorItem;
  47.     
  48.     this->CreateWindow(kModalWindow);
  49.     
  50.     if (fWindow == nil)
  51.         return nilHandleErr;
  52.  
  53.     fOriginalCount = CountDITL((DialogRef)fWindow);
  54.  
  55.     Handle    myDITL = GetResource('DITL', fTemplateID + defaultPanel);
  56.     OSErr    err = ResError();
  57.     
  58.     if (myDITL && !err)
  59.         {
  60.         AppendDITL((DialogRef)fWindow, myDITL, overlayDITL);
  61.         ReleaseResource(myDITL);
  62.         
  63.         err = ResError();
  64.         }
  65.         
  66.     if (err == noErr)
  67.         {
  68.         SetDialogDefaultItem((DialogRef)fWindow, 1);
  69.         SetDialogCancelItem((DialogRef)fWindow, 1);
  70.         SetDialogTracksCursor((DialogRef)fWindow, true);
  71.                 
  72.         fCurrentPanel = defaultPanel;
  73.  
  74.         SetControlSetting((DialogRef)fWindow, panelSelectorItem, defaultPanel);
  75.         }
  76.         
  77.     if (!gHasAppleGuide && !err)
  78.         {
  79.         if (guideItem != 0)
  80.             SetControlActive((DialogRef)fWindow, guideItem, false);
  81.         }
  82.         
  83.     // Your IMultiPanelDialogWindow() subclass _must_ call the following function:
  84.     // this->InitPanel(defaultPanel);
  85.     
  86.     return err;
  87. }
  88.  
  89.  
  90.  
  91. void TMultiPanelDialogWindow::ItemHit(short theItem)
  92. {
  93.     OSErr    err;
  94.     
  95.     if (theItem == kStdOkItemIndex)
  96.         {
  97.         this->ExitPanel(fCurrentPanel);
  98.         this->Close();
  99.         delete this;    // As evidenced by this, save all your data as you go, or else do some serious work
  100.                         // in the destructor to save the data you just received.
  101.         return;
  102.         }
  103.  
  104.     if (theItem == fPanelSelectorItem)
  105.         {
  106.         short panel = GetControlSetting((DialogRef)fWindow, fPanelSelectorItem);
  107.         
  108.         if (panel == fCurrentPanel)
  109.             return;
  110.             
  111.         this->ExitPanel(fCurrentPanel);
  112.         
  113.         ShortenDITL( (DialogRef)fWindow, CountDITL((DialogRef)fWindow) - fOriginalCount );
  114.  
  115.         Handle    myDITL = GetResource('DITL', fTemplateID + panel);
  116.         if (myDITL)
  117.             {
  118.             AppendDITL((DialogRef)fWindow, myDITL, overlayDITL);
  119.             ReleaseResource(myDITL);
  120.             
  121.             fCurrentPanel = panel;
  122.  
  123.             this->InitPanel(fCurrentPanel);        
  124.             }
  125.             
  126.         return;
  127.         }
  128.             
  129.     if (theItem == fGuideItem)
  130.         {
  131.         if (fGuideSearchString[0] > 0)
  132.             err = OpenGuideFileWithSearch(fGuideSearchString);
  133.         else
  134.             err = OpenGuideFile();
  135.         
  136.         if (err == kAGErrDatabaseNotAvailable)
  137.             ErrorAlert(131, 1, false);
  138.         else if (err)
  139.             ErrorReporter(err, __FILE__, __LINE__);
  140.         
  141.         return;
  142.         }
  143.             
  144.     if (theItem > fOriginalCount)
  145.         {
  146.         short panel = GetControlSetting((DialogRef)fWindow, fPanelSelectorItem);
  147.         this->ClickInPanel(panel, theItem);
  148.         }
  149. }
  150.  
  151. /*
  152.  
  153. // Override this function to setup the dialog panel.
  154.  
  155. void TMultiPanelDialogWindow::InitPanel(short thePanel)
  156. {
  157.     switch(thePanel)
  158.         {
  159.         }
  160. }
  161.  
  162.  
  163. // Override this function to handle clicks in the active panel.
  164. // Don't forget to decrement theItem by fOriginalCount to get a true 1-based control ID.
  165.  
  166. void TMultiPanelDialogWindow::ClickInPanel(short thePanel, short theItem)
  167. {
  168.     switch(thePanel)
  169.         {
  170.         }
  171. }
  172.  
  173.  
  174. // Override this function to save data before switching panels.
  175.  
  176. void TMultiPanelDialogWindow::ExitPanel(short thePanel)
  177. {
  178.     switch(thePanel)
  179.         {
  180.         }
  181. }
  182. */
  183.  
  184.  
  185.